home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1994 December
/
PSL Monthly Shareware CD-ROM (Public Software Library)(December 1994).bin
/
prgmming
/
dos
/
pascal2
/
bresn.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-01-05
|
2KB
|
62 lines
// bresn.pas
// file which shows how to draw a line
program bresn;
uses Graph;
procedure initialize;
// initialize graphics
var Gm, Gd : integer;
begin
Gd := DETECT;
initgraph( gd, gm, '' );
end;
procedure drawLine( xStart, yStart, xEnd, yEnd : integer );
// draws line
var dx, dy, E, NE, d, x, y : integer;
begin
dx := xEnd-xStart;
dy := yEnd-yStart;
d := 2*dy-dx;
E := 2*dy;
NE := 2*(dy-dx);
x := xStart;
y := yStart;
putpixel( x, y, WHITE );
while x < xEnd do
begin
if d <= 0 then
begin
d := d+E;
x := x+1;
end
else
begin
d := d+NE;
x := x+1;
y := y+1;
end;
putpixel( x, y, WHITE );
end;
end;
// The way Bresenham's algorithm (also known as midpoint algorithm) works
// basically plotting the line raster by raster rather than producing it
// by brute force with a formula. Obviously, its better than using the
// formula since it allows for vertical lines and uses no multiplication
// or division. The algorithm in its entirety uses 4 line algorithms for
// slopes of 0 to 1, 1 to infinity, 0 to -1, and -1 to -infinity. The
// algorithm above shows just works for slopes 0 to -1, since the other
// three are easily obtained with a few simple modifications.
// What the algorithm does, in this case, is that it draws a line from
// xStart,yStart to xEnd,yEnd. It then computes the distance of the midpoint
// between the two pixels to the line itself, KEEPING THE SIGN. If the sign
// is positive, then the plotter goes down one line as well as over one pixel.
// If negative, then the plotter remains at the same line. The plotter then
// goes to the next point and repeats the process. Bresenham's is extremely
// useful for anti-aliased lines. If you want, e-mail me and I'll send
// details on that as well.
// chetan deshpande